import java.util.Arrays;

/**
 * 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗？
 * https://leetcode-cn.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day/
 */
public class Solutions_1744 {
    public static void main(String[] args) {
//        int[] candiesCount = {7, 4, 5, 3, 8};
//        int[][] queries = {{0, 2, 2}, {4, 2, 4}, {2, 13, 1000000000}};
        // output: {true, false, true}

        int[] candiesCount = {5, 2, 6, 4, 1};
        int[][] queries = {{3, 1, 2}, {4, 10, 3}, {3, 10, 100}, {4, 100, 30}, {1, 3, 1}};
        // output: {false, true, true, false, false}

        boolean[] result = canEat(candiesCount, queries);
        System.out.println(Arrays.toString(result));
    }

    public static boolean[] canEat(int[] candiesCount, int[][] queries) {
        boolean[] res = new boolean[queries.length];
        // sum[1] = 7，表示想到吃到类型 1 的糖果，最少需要吃掉 7 个糖果
        long[] sum = new long[candiesCount.length + 1];

        for (int i = 1; i <= candiesCount.length; i++) {
            sum[i] = candiesCount[i - 1] + sum[i - 1];
        }
        for (int i = 0; i < queries.length; i++) {
            int[] arr = queries[i];
            int type = arr[0];
            // 想要吃到 type 类型的糖果，最少需要吃掉 needEat 个糖果（少了就吃不到）
            long needEat = sum[type];
            // 想要吃到 type 类型的糖果，最多可以吃掉 limitEat 个糖果
            // 再吃的话，等不到 arr[1] 天，就把 type 类型的糖果吃完了
            long limitEat = sum[type + 1];

            // 关键：总共可以吃 arr[1] + 1 天的糖果，因为 arr[1] 是从 0 开始的
            long days = arr[1] + 1;

            // 每天按最少的量，能够吃 minEat 颗糖果，即每天吃 1 颗
            long minEat = days;
            // 每天按最多的量，能够吃 maxEat 颗糖果，即每天吃 arr[2] 颗
            long maxEat = days * arr[2];

            // [minEat, maxEat] 与 (needCandies, limitCandies] 产生交集即可
            if (maxEat > needEat && minEat <= limitEat) {
                res[i] = true;
            }
        }
        return res;
    }
}
